{
Miranda IM: the free IM client for Microsoft* Windows*

Copyright 2000-2003 Miranda ICQ/IM project,
all portions of this codebase are copyrighted to the people
listed in contributors.txt.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
}

{$IFNDEF M_PROTOMOD}
{$DEFINE M_PROTOMOD}

 {$ifndef M_PROTOCOLS}
     {$include m_protocols.inc}
 {$endif}

const
  {
    wParam : 0
    lParam : Pointer to a initalised TPROTOCOLDESCRIPTOR structure
    Affect : Register a protocol module, see notes
    Returns: 0 on success, [non zero] on failure
    Notes  : This service MUST be called from your module's Load() function
             TPROTOCOLDESCRIPTOR.type can be a value other than PROTOTYPE_*
             which are used to provide a more precise positioning information
             for the contact protocol lists.
             -
             Relative values to the constants can be given, but this MUST NOT
             be done for PROTOTYPE_PROTOCOL.
  }
  MS_PROTO_REGISTERMODULE:PAnsiChar = 'Proto/RegisterModule';

  {
    wParam : HCONTACT
    lParam : protocol_name_string
    Affect : Add the given protocol module to the chain for a contact, see notes
    Returns: 0 success, [non zero] on failure
    Notes  : The module is added to the correct positioning according to it's
             registered type.
  }
  MS_PROTO_ADDTOCONTACT:PAnsiChar = 'Proto/AddToContact';

  {
    wParam : HCONTACT
    lParam : protocol_name_string
    Affect : Remove the given protocol name from the chain for the given contact
    Returns: 0 on success, [non zero] on failure
  }
  MS_PROTO_REMOVEFROMCONTACT:PAnsiChar = 'Proto/RemoveFromContact';

 { see m_globaldefs.pas for CreateProtoServiceFunction }

  {
    wParam : wParam [arg]
    lParam : lParam [arg]
    Affect : Call the next service in the chain for the send operation, see notes
    Return : Return value should be returned by CallService(MS_PROTO_CHAINSEND,wParam,lParam)
    Notes  : wParam MUST remain untouched, lParam is a pointer to a CSSDATA structure
             and can be modified or copid if needed.
             wParam and lParam should be the values passed to your service,
             typically your service should return ASAP.
  }
  MS_PROTO_CHAINSEND:PAnsiChar = 'Proto/ChainSend';

  {
    wParam : wParam [arg]
    lParam : lParam [arg]
    Affect : Call the next service in the chain in this receive operation, see notes
    Return : Return value should be returned by CallService(MS_PROTO_CHAINRECV,wParam,lParam)
    Notes  : wParam MUST remain untouched, lParam is a pointer to a CSSDATA structure
             and can be modified or copied if needed.
             wParam and lParam should be the values passed to your service,
             typically your service should return ASAP.
             -
             MS_PROTO_CHAINRECV is thread safe since 0.1.2.0 -- calls
             are translated to the main thread and passed from there.
  }
  MS_PROTO_CHAINRECV:PAnsiChar = 'Proto/ChainRecv';

  {
    wParam : 0
    lParam : Pointer to an initalised ACKDATA
    Affect : Broadcast a ME_PROTO_ACK event, see notes
    Returns: The return value of the NotifyEventHooks() call
    Notes  : ME_PROTO_ACK is completely thread safe since 01.2.0
             see notes in core/modules.h under NotifyEventHooks()
  }
  MS_PROTO_BROADCASTACK:PAnsiChar = 'Proto/BroadcastAck';

// -- Added during 0.3.4 (2004/09/27) development! -----
{
  wParam: (HANDLE)hContact
  lParam: 0
  Affect: Given a hContact, return the protocol that is registered for it, or NULL if no such protocol exists,
      the returned string does not have to be freed and is valid even for multiple threads.
  Note:  Prior to 2004/09/28 this service WAS NOT THREAD SAFE and was slower
  Note:  Prior to 2004/09/28 this service would return NULL for a hContact if the protocol module
      associated with the hContact was not currently loaded, no such check is performed now.
  Version: 0.3.4 (2004/09/28)
}
const
  MS_PROTODIR_PROTOFROMCONTACT = MS_PROTO_GETCONTACTBASEPROTO;

{$ENDIF}
